
//数据层面的封装
//__name 就是一种私有变量，外部访问不到
var myObject = (function () {
    var __name = 'sven';
    return {
        getName:function () {
            return __name;
        }
    }
})();
console.log(myObject.getName());
console.log(myObject.__name);


//封装的目的是将信息隐藏，隐藏数据，实现细节，设计细节，对象的类型等等
//封装使得对象的内部的变化对于其他对象是透明的，也就是不可见的
//对象只对它自己的行为负责，其他对象或者用户都不关心它的内部实现
//使得对象之间的耦合变得松散，对象之间只通过暴露的api接口来通信
//修改对象时，内部实现可以随意修改，只要保证对外的接口不变就行